package com.wtwd.campus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wtwd.campus.entity.*;
import com.wtwd.campus.model.dto.AppDisableTimeDto;
import com.wtwd.campus.model.dto.QueryAppDisAbleStateDto;
import com.wtwd.campus.model.vo.AuthDeviceIsSupportAppVo;
import com.wtwd.campus.model.vo.QueryDeviceAppVo;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author mjy
 * @since 2022-12-12
 */
public interface DeviceAppService extends IService<DeviceApp> {

    Integer SUPPORT = 1;

    /**
     * 处理上传app信息数据
     * 根据类型处理不同
     * 类型详见 UploadAppTypeEnum
     *
     * @param deviceId
     * @param appInfos
     * @param type
     * @return
     */
    boolean dealUpLoadAppData(Integer deviceId, List<MqAppInfo> appInfos, int type);


    /**
     * 插入或者更新
     * 依旧条件 deviceId,package_name,app_public_file_type
     *
     * @param deviceApps
     * @return
     */
    boolean batchInsertOrUpdate(List<DeviceApp> deviceApps);


    /**
     * 批量删除
     * 依旧条件 deviceId,package_name,app_public_file_type
     *
     * @param deleteDeviceAppDtos
     * @return
     */
    boolean batchDelete(List<DeleteDeviceAppDto> deleteDeviceAppDtos);


    /**
     * 修改单个设备里单个app的禁用状态
     *
     * @param deviceId
     * @param packageName
     * @param flag
     * @return
     */
    boolean updateAppDisableFlag(Integer deviceId, String packageName, int flag);


    /**
     * 处理app禁用
     * 关于时间段设置
     * 只有关闭禁用状态平台才会下发时间段生效,如果设备回复则证明一定为生效状态
     *
     * @param deviceId
     * @param packageName
     * @param flag
     * @param mqAppDisableTimes
     * @return
     */
    boolean dealAppDisable(Integer deviceId, String packageName, int flag, List<MqAppDisableTime> mqAppDisableTimes);

    /**
     * 鉴别设备是否支持内置app
     *
     * @param imei
     * @return
     */
    AuthDeviceIsSupportAppVo authDeviceIsSupportApp(String imei);

    /**
     * 根据设备id查询app信息
     *
     * @param deviceId
     * @return
     */
    List<QueryDeviceAppVo> queryDeviceAppByDeviceId(Integer deviceId);


    /**
     * 设置app安装开关
     * 描述：
     * 前端打开开关,数据库状态待打开，设备回复后真正打开
     * 关闭同理
     * if 设备未回复再次下发,清除之前这条指令的发送缓存,指令记录置为失败处理,进行下一次指令的发送
     *
     * @param deviceInfo
     * @param flag
     * @return
     */
    boolean appInstallationSwitch(DeviceInfo deviceInfo, Integer flag);

    /**
     * 1.取消缓存重发
     * 2.进缓存指令置为失败处理
     *
     * @param imei
     * @param cmdPrefix
     * @return
     */
    Boolean deleteCacheCmd(String imei, String cmdPrefix);

    /**
     * 设置app禁用
     * mqAppDisableTimes可以为空其他参数必填
     *
     * @param deviceInfo
     * @param packageName
     * @param appFlag
     * @param appDisableTimeDtos
     * @return
     */
    boolean setAppDisable(DeviceInfo deviceInfo, String packageName, int appFlag, List<AppDisableTimeDto> appDisableTimeDtos);

    /**
     * 查询设备开关
     *
     * @param deviceId
     * @return
     */
    DeviceFlag queryDeviceSwitch(Integer deviceId);



    /**
     * 查询app禁用状态
     *
     * @param deviceId
     * @param packageName
     * @return
     */
    QueryAppDisAbleStateDto queryAppDisAbleState(Integer deviceId, String packageName);

}
